#include "Zadanie.h"

      int Zadanie::aktualnyNr = 1;
       
      Zadanie::Zadanie() 
      {
           nr = -1;
      }
      
      Zadanie::Zadanie(int _nr, int _dlugosc, int _czasPrzybycia, COLORREF _kolor) 
      {
                  nr = _nr;
                  dlugosc = _dlugosc;
                  dlugoscWykonana = 0;
                  czasPrzybycia = _czasPrzybycia;
                  czasOczekiwania = 0;
                  czasPrzebywania = 0;
                  czasOpuszczenia = 0;
                  nrGniazda = -1;
                  nrMaszyny = -1;
				  kolor = _kolor;
				  nastepneGniazdo = -1;
				  status = statusZadania(nieNadeszlo);
				  nrStrumienia = 1;
      }
      Zadanie::Zadanie(int _nr, int _dlugosc, int _czasPrzybycia, COLORREF _kolor, int _nrStrumienia) 
      {
                  nr = _nr;
                  dlugosc = _dlugosc;
                  dlugoscWykonana = 0;
                  czasPrzybycia = _czasPrzybycia;
                  czasOczekiwania = 0;
                  czasPrzebywania = 0;
                  czasOpuszczenia = 0;
                  nrGniazda = -1;
                  nrMaszyny = -1;
				  kolor = _kolor;
				  nastepneGniazdo = -1;
				  status = statusZadania(nieNadeszlo);
				  nrStrumienia = _nrStrumienia;
      }


      Zadanie::~Zadanie(void) {}
      

	bool Zadanie::operator<(const Zadanie &z) const
	{
	   if( this->czasPrzybycia<=z.czasPrzybycia )return true;
	   else  return false;
	}


	Zadanie& Zadanie::operator= (const Zadanie& z)
	{
		this->nr = z.nr;
		this->dlugosc = z.dlugosc;
		this->dlugoscWykonana = z.dlugoscWykonana;
		this->czasPrzybycia = z.czasPrzybycia;
		this->czasOczekiwania = z.czasOczekiwania;
		this->czasPrzebywania = z.czasPrzebywania;
		this->czasOpuszczenia = z.czasOpuszczenia;
		this->kolor = z.kolor;
		this->nrGniazda = z.nrGniazda;
		this->nrMaszyny = z.nrMaszyny;
	 
	   return *this;
	} 
    bool Zadanie::operator==(const Zadanie& z)
    {
        return (this->nr == z.nr);
    }
    
	char * Zadanie::statusToString()
	{
		char * buff = new char[50];
		//if (status == statusZadania(
		return buff;
	}

    char * Zadanie::wypisz2(void)
    {
        char * buffer = new char[200];
        sprintf (buffer, "|%5d |%5d |%5d |%5d |%5d |%5d |%5d |%5d |%5d | %2d", nr, dlugosc, dlugoscWykonana, czasPrzybycia,czasOczekiwania,czasPrzebywania, czasOpuszczenia, nrGniazda, nrMaszyny ,status);
        return buffer;
    }
	void Zadanie::updateStats(void)
	{
		if (this->status != statusZadania(nieNadeszlo) && this->status != statusZadania(wyszloZSystemu))
			czasPrzebywania++;
		if (this->status == statusZadania(oczekujeNaWejscieDoSystemu))
			czasOczekiwania++;
		else if (this->status == statusZadania(czekaWKolejce))
			czasOczekiwania++;
		else if (this->status == statusZadania(wykonujeSieWMaszynie))
			dlugoscWykonana++;
		else if (this->status == statusZadania(zablokowaneWMaszynie))
			czasOczekiwania++;
		if (dlugoscWykonana == dlugosc) status = statusZadania(zablokowaneWMaszynie);
	}

